package com.hserver.docker.service;

import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Image;
import com.hserver.docker.bean.Deploy;
import com.hserver.docker.bean.StatusVo;

import java.util.List;

/**
 * @author hxm
 */
public interface DockerService {

    /**
     * 构建一个docker镜像
     *
     * @param deploy
     * @param recordId
     * @return
     */
    Boolean buildImage(Deploy deploy, String recordId);

    /**
     * 删除镜像
     *
     * @param recordId
     * @return
     */
    Boolean removeImage(String recordId);


    /**
     * 创建容器
     *
     * @param uuid
     * @param recordId
     * @return
     */
    Boolean createContainer(String uuid, String recordId);


    /**
     * 运行容器
     *
     * @param uuid
     * @param recordId
     * @return
     */
    Boolean runContainer(String uuid, String... recordId);


    /**
     * 回滚镜像版本
     *
     * @param uuid
     * @param recordId
     * @return
     */
    Boolean runRollBackContainer(String uuid, String recordId);


    /**
     * 停止
     *
     * @param uuid
     * @return
     */
    Boolean stopContainer(String uuid);

    /**
     * 删除
     *
     * @param uuid
     * @return
     */
    Boolean removeContainer(String uuid);


    /**
     * 容器信息
     *
     * @param uuid
     * @return
     */
    StatusVo infoContainer(String uuid);


    /**
     * 检查连接
     *
     * @param url
     * @return
     */
    Boolean checkDockerUrl(String url);

    /**
     * 镜像列表
     *
     * @return
     */
    List<Image> imagesList();

    /**
     * 获取容器列表
     *
     * @return
     */
    List<Container> containerList();

    /**
     * 通过镜像ID删除
     *
     * @param imageId
     * @throws Exception
     */
    void removeImageId(String imageId) throws Exception;


    /**
     * 通过容器ID运行容器
     *
     * @param containerId
     * @throws Exception
     */
    void runContainerId(String containerId) throws Exception;

    /**
     * 停止容器
     *
     * @param containerId
     * @throws Exception
     */
    void stopContainerId(String containerId) throws Exception;

    /**
     * 删除容器
     * @param containerId
     * @throws Exception
     */
    void removeContainerId(String containerId) throws Exception;

}
